#ifndef __FILTER_H__
#define __FILTER_H__

#include <highgui.h>
#include <cv.h>
#include <iostream>
#include <Picture.h>
#include "boost/smart_ptr.hpp"

/* Filter interface class
 * This is a abstract interface class that create an unifore interaction
 * with filters. There are two mandatory functions
 * that should define the behavior againts GUI interface (refresh) and
 * refine of the filter (nextIter)
 */
class Filter{
    public:
        /* Interface for gui-based mechanism, providing the matrix to be displayed */
        virtual bool refresh(cv::Mat& image) const = 0;

        /* Inteface for executing the filter.
         * This funciton is called after new information is
         * provided (i.e - user interaction, other calculations etc...) */
        virtual int nextIter(void* moreData=0) = 0;

        /* export a Picture version of the the filterred image */
        virtual boost::shared_ptr<Picture> exportPicture() = 0;
};


#endif // __FILTER_H__
